import pandas as pd

def clean_data(data):
    # 去掉无用的列（如果有）
    # data.drop(columns=['无用列名'], inplace=True, errors='ignore')

    # 去掉缺失值（在必要的情况下选择填补缺失值）
    data.dropna(subset=['购药时间', '社保卡号', '商品编码', '商品名称', '销售数量', '应收金额', '实收金额'], inplace=True)

    # 转换销售数量、应收金额和实收金额为数值类型
    data['销售数量'] = pd.to_numeric(data['销售数量'], errors='coerce')
    data['应收金额'] = pd.to_numeric(data['应收金额'], errors='coerce')
    data['实收金额'] = pd.to_numeric(data['实收金额'], errors='coerce')

    # 拆分购药时间
    data[['购药日期', '星期']] = data['购药时间'].str.split(expand=True)

    # 去掉重复行
    data.drop_duplicates(inplace=True)

    # 去掉处理后的缺失值
    data.dropna(inplace=True)

    return data

def analyze_data(file_path):
    # 读取数据
    data = pd.read_excel(file_path)

    # 数据清洗
    data = clean_data(data)

    # 转换购药日期为日期格式，处理无效日期
    data['购药日期'] = pd.to_datetime(data['购药日期'], errors='coerce')

    # 去掉无效日期
    # data.dropna(subset=['购药日期'], inplace=True)

    # 确保销售数量和金额为数值类型
    data['销售数量'] = data['销售数量'].astype(int)
    data['应收金额'] = data['应收金额'].astype(float)

    # 数据分析
    sales_summary = data.groupby(data['购药日期'].dt.date).agg({
        '销售数量': 'sum',
        '应收金额': 'sum'
    }).reset_index()

    # 销售构成分析（按商品）
    product_summary = data.groupby('商品名称').agg({
        '销售数量': 'sum',
        '应收金额': 'sum'
    }).reset_index()

    # 销售数量分布（按星期几）
    week_summary = data.groupby('星期').agg({
        '销售数量': 'sum'
    }).reset_index()

    # 将购药日期转换为字符串格式
    sales_summary['购药日期'] = sales_summary['购药日期'].astype(str)

    # 销售金额趋势分析（与销售数量趋势相同，使用 sales_summary）
    sales_amount_summary = sales_summary.copy()
    sales_amount_summary['购药日期'] = sales_amount_summary['购药日期'].astype(str)

    # 检查是否有数据
    print("Sales Summary:", sales_summary)
    print("Product Summary:", product_summary)
    print("Week Summary:", week_summary)

    return {
        'sales_summary': sales_summary.to_dict(orient='records'),
        'product_summary': product_summary.to_dict(orient='records'),
        'week_summary': week_summary.to_dict(orient='records'),
        'sales_amount_summary': sales_amount_summary.to_dict(orient='records')
    }

if __name__ == '__main__':
    result = analyze_data('../data/朝阳医院2018年销售数据.xlsx')
    print(result)
